package javaman.servlet;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import javaman.gestor.GestorCategoria;
import javaman.gestor.GestorProfesor;
import javaman.modelo.ProfesorCategoria;
import javaman.modelo.Usuario;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

/**
 * Servlet implementation class RegistrarProfesorServlet
 */
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
        maxFileSize=1024*1024*10,      // 10MB
        maxRequestSize=1024*1024*50)   // 50MB
public class RegistrarProfesorServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	private static final String SAVE_DIR = "uploadFiles";
	GestorProfesor gestorProfesor = new GestorProfesor();
	GestorCategoria gestorCategoria = new GestorCategoria();
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RegistrarProfesorServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String destino = "/listadoProfesor.jsp";
		String imagePath = uploadFile(request);
		String accion = request.getParameter("accion");
		String nombres = request.getParameter("nombre");
		String paterno = request.getParameter("paterno");
		String materno = request.getParameter("materno");
		String sexo = request.getParameter("sexo");
		String documento = request.getParameter("documento");
		String numdocumento = request.getParameter("numdocumento");
		String mail = request.getParameter("mail");
		String celular = request.getParameter("celular");
		String contrasena = request.getParameter("contrasena");
		String perfil = request.getParameter("perfil");
		String categorias[] = request.getParameterValues("categorias");
		
		if(numdocumento != null) {
			numdocumento = numdocumento.replace("-", "");
		}
		
		if(celular != null) {
			celular = celular.replace("-", "");
		}
		
		
		System.out.println(imagePath);
		System.out.println(nombres);
		System.out.println(paterno);
		System.out.println(materno);
		System.out.println(sexo);
		System.out.println(documento);
		System.out.println(numdocumento);
		System.out.println(mail);
		System.out.println(celular);
		System.out.println(contrasena);
		System.out.println(perfil);
		
		Usuario usuario = new Usuario();
		
		usuario.setNombres(nombres);
		usuario.setPaterno(paterno);
		usuario.setMaterno(materno);
		usuario.setIdsexo(Integer.parseInt(sexo));
		usuario.setIddocumento(Integer.parseInt(documento));
		usuario.setNumerodoc(numdocumento);
		usuario.setMail(mail);
		usuario.setCelular(celular);
		usuario.setClave(contrasena);
		usuario.setPerfil(perfil);
		usuario.setFoto("http://localhost:8080/dew-javaman-upc-app/fotos/uploadFiles"+imagePath);
		System.out.println("foto:"+usuario.getFoto());
		ProfesorCategoria profesorCategoria[] = null;
		
		if(categorias!=null) {
			if(categorias.length>0) {
				profesorCategoria = new ProfesorCategoria[categorias.length]; 
				
				for(int i=0;i<categorias.length;i++){
					ProfesorCategoria pc = new ProfesorCategoria();
					pc.setIdcategoria(Integer.parseInt(categorias[i]));
					profesorCategoria[i] = pc;
				}	
			}
		}
		
		String resultado = "OK";
		
		if(accion.equals("insertar")) {
			resultado = gestorProfesor.registrarProfesor(usuario, profesorCategoria);
		
			if(!resultado.equals("OK")) {
				destino = "/formularioProfesor.jsp";
				
				File deleteFile = new File(imagePath);
				
				deleteFile.delete();
				
				request.setAttribute("accion",accion);
				request.setAttribute("foto", nombres);
				request.setAttribute("nombre", nombres);
				request.setAttribute("paterno", paterno);
				request.setAttribute("materno", materno);
				request.setAttribute("sexo", sexo);
				request.setAttribute("documento", documento);
				request.setAttribute("numdocumento", numdocumento);
				request.setAttribute("mail", mail);
				request.setAttribute("celular", celular);
				request.setAttribute("perfil", perfil);
				request.setAttribute("categorias", profesorCategoria);		
				request.setAttribute("arrCategorias",gestorCategoria.listarCategorias());
				request.setAttribute("resultado", resultado);
			
			} else {
				request.setAttribute("resultado", "Se registro correctamente el profesor.");
				request.setAttribute("arrListado",gestorProfesor.listarProfesores());
			}
			
		} else if (accion.equals("modificar")) {
			String idprofesor = request.getParameter("idprofesor");
			Usuario profesor = gestorProfesor.buscarProfesorById(Integer.parseInt(idprofesor));
			usuario.setIdusuario(Integer.parseInt(idprofesor));
			resultado = gestorProfesor.modificarProfesor(usuario, profesorCategoria);
			
			if(!resultado.equals("OK")) {
				destino = "/formularioProfesor.jsp";
				
				request.setAttribute("idprofesor",idprofesor);
				request.setAttribute("accion",accion);
				request.setAttribute("foto", profesor.getFoto());
				request.setAttribute("nombre", nombres);
				request.setAttribute("paterno", paterno);
				request.setAttribute("materno", materno);
				request.setAttribute("sexo", sexo);
				request.setAttribute("documento", documento);
				request.setAttribute("numdocumento", numdocumento);
				request.setAttribute("mail", mail);
				request.setAttribute("celular", celular);
				request.setAttribute("perfil", perfil);
				request.setAttribute("categorias", profesorCategoria);		
				request.setAttribute("arrCategorias",gestorCategoria.listarCategorias());
				request.setAttribute("resultado", resultado);
				
			} else {
				request.setAttribute("resultado", "Se modifico correctamente el profesor.");
				request.setAttribute("arrListado",gestorProfesor.listarProfesores());
			}
		}
		
        getServletContext().getRequestDispatcher(destino).forward(request, response);
		
	}
	
	private String uploadFile(HttpServletRequest request) throws IllegalStateException, IOException, ServletException {
		String imagePath = "";
		String savePath = "/Users/Daniel/Programas/apache-tomcat-7/webapps/dew-javaman-upc-app/fotos/"+ SAVE_DIR;
        // creates the save directory if it does not exists
        
		File fileSaveDir = new File(savePath);
        if (!fileSaveDir.exists()) {
            fileSaveDir.mkdir();
        }
        
        for (Part part : request.getParts()) {
            String fileName = extractFileName(part);
            if(!fileName.equals("")) {
            	imagePath = "/" + fileName;
            	part.write(savePath + "/" + fileName);
            	break;
            }
        }
        return imagePath;
	}
	
	 /**
     * Extracts file name from HTTP header content-disposition
     */
    private String extractFileName(Part part) {
    	String contentDisp = part.getHeader("content-disposition");
        
        String[] items = contentDisp.split(";");
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                return s.substring(s.indexOf("=") + 2, s.length()-1);
            }
        }
        return "";
    }

}
